import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import react from '@vitejs/plugin-react'
// import legacy from '@vitejs/plugin-legacy'
import { resolve } from 'path'
// import { fileURLToPath, URL } from 'node:url'
// import { babel } from '@rollup/plugin-babel'

// 1. 原生支持css, 内部已集成postcss, 添加配置只需新建postcss.config.js
// 2. 原生支持图片, 字体, 视频, 音频等资源, 无需配置
export default defineConfig({
  // mode: 'production',
  plugins: [
    vue(),
    vueJsx(),
    react()
    // 配置es6转es5(此处配置与rollupOptions配置babel插件二选一)(应用与库模式都支持)
    // babel({
    //   extensions: ['.js', '.ts', '.vue'],
    //   babelHelpers: 'runtime'
    // })
    // vite兼容低版本浏览器插件(只支持应用模式, 不支持库模式)
    // legacy({
    //   targets: ['chrome>=79', 'not IE 11']
    // })
  ],
  resolve: {
    alias: {
      '@': '/src'
      // '@': fileURLToPath(new URL('./src', import.meta.url))
    },
    extensions: ['.js', '.ts', '.vue']
  },
  css: {
    preprocessorOptions: {
      scss: {
        // api: 'modern-compiler',
        additionalData: `
          @use '@/style.scss' as *;
        `
      }
    }
  },
  // server: {
  //   proxy: {
  //     '/foo': 'http://localhost:4567',
  //     '/api': {
  //       target: 'http://xxx:8080',
  //       changeOrigin: true,
  //       rewrite: (path) => path.replace(/^\/api/, '')
  //     }
  //   }
  // },
  build: {
    minify: 'terser',
    terserOptions: {
      compress: {
        // drop_console: true,
        // drop_debugger: true
      }
    },
    // rollupOptions: {
    //   plugins: [
    //     babel({
    //       extensions: ['.js', '.ts', '.vue'],
    //       babelHelpers: 'runtime'
    //     })
    //   ]
    // },
    // 将代码打包成库模式(不开启则默认打包应用模式)
    // @vitejs/plugin-legacy插件不支持库模式, 需使用上方rollupOptions配置babel插件
    lib: {
      entry: resolve(__dirname, 'src/main.js'),
      name: 'main-sdk',
      formats: ['umd'],
      fileName: (format, entryName) => `my-lib-${entryName}.${format}.js`,
      cssFileName: 'my-lib-main'
    }
  },
  optimizeDeps: {
    // 预购建的依赖
    include: [],
    // 不预构建的依赖
    exclude: []
  }
})
